// package: rewords-server-2024
// filename: cCfg
// author: diogoxiang@gmail.com
// time: 2024/7/31 上午10:56

package cfg

import (
	"rewords-server-2024/internal/model"
	"time"
)

// Config 程序配置
type Config struct {
	Setting SettingConfig `json:"setting"`
	Mail    MailConf      `json:"mail"`
	Mongo   MongoConf     `json:"mongo"`
	Qiniu   QiniuConf     `json:"qiniu"`
	Weixin  WxConf        `json:"wxconf"`
	Actsign Actsign       `json:"actsign"`
	//Logger LoggerConf `json:"logger"`
	//Models ModelsConf `json:"models"`
	//Server ServerConf `json:"server"`
	Ding  DingConf        `json:"ding"`
	Token model.TokenConf `json:"token"`
}

// SettingConfig  应用系统设置
type SettingConfig struct {
	ApiServiceName string `json:"apiServiceName"` // API 服务的名字
	BackGlobal     string `json:"backGlobal"`     // 后台服务地址 prefix
	Apiport        string `json:"apiport"`        // API的端口号
	PublicPath     string `json:"publicPath"`     // 公共目录
	CacheTime      string `json:"cacheTime"`      // Cache
	// Buntdb Store  数据库 主要是用来 存储 auth token
	TokenCacheDB string `json:"tokenCacheDB"`
	// token 缓存时间 分钟  1天 1440  3天 4320
	TokenCacheTime time.Duration `json:"tokenCacheTime"`
	// 数据缓存时间为60秒,如一些列表可以用缓存存储
	StoreTimes int `json:"storeTimes"`
	// pool 中put 的释放时间 10秒
	PutTimes int `json:"putTimes"`
	// 接口请求限制 1分钟 1800次
	MaxLimiter int `json:"maxLimiter"`
	// gcacheTimes 通用时间10分钟  1 * time.Minute 主要用于部分数据缓存
	GcacheTimes int `json:"gcacheTimes"`
	// 开启 pprof 分析
	IsopenPProf bool `json:"isopenPProf"`
	// 服务运行的环境
	Environment string `json:"Environment"`
	// 上传图片的限制
	MaxTempsize int64 `json:"MaxTempsize"`
	// 临时上传保存地址
	UploadTmpDir string `json:"uploadTmpDir"`
	// 临时上传访问的域名
	UploadDomain string `json:"uploadDomain"`
}

// MailConf 邮件
type MailConf struct {
	Host     string `json:"host"`
	Port     int    `json:"port"`
	Username string `json:"username"`
	Password string `json:"password"`
}

// MongoConf 配置
type MongoConf struct {
	Uri            string        `json:"mongoUrl"`
	DbName         string        `json:"mgoDbName"`
	InitialCap     int           `json:"InitialCap"`
	PoolSize       int           `json:"mgoPoolSize"`
	MaxCap         int           `json:"mgoMaxCap"`
	ConnectTimeout time.Duration `json:"connectTimeout"`
	CommitTimeout  time.Duration `json:"commitTimeout"`
	QueryTimeout   int           `json:"queryTimeout"`
}

// QiniuConf 七牛配置
type QiniuConf struct {
	AccessKey string `json:"accessKey"`
	SecretKey string `json:"secretKey"`
	Bucket    string `json:"bucket"`
	FilePath  string `json:"filePath"`
	ImgPath   string `json:"imgPath"`
	CdnHost   string `json:"cdnHost"`
}

// WxConf 微信类配置
type WxConf struct {
	WeAppID     string `json:"weAppId"`
	WeAppSecret string `json:"weAppSecret"`
	MpAppID     string `json:"mpAppId"`
	MpAppSecret string `json:"mpAppSecret"`
}

// Actsign 签到活动的配置
type Actsign struct {
	Stime  time.Time `json:"stime"`
	Etime  time.Time `json:"etime"`
	Turn   []int     `json:"turn"`
	Status bool      `json:"status"`
}

// DingConf 钉钉配置
type DingConf struct {
	Corpid       string `json:"corpid"`
	ClientSecret string `json:"clientSecret"`
	ClientId     string `json:"clientId"`
}
